<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js闭包</title>
</head>
<body>
<h3>闭包的概念:</h3>
<p>1 能够访问另一个函数作用域变量的函数</p>
<h3>闭包的作用:</h3>
<p>1 可以读取函数内部的变量</p>
<p>2 变量的值始终保持在内存中</p>
<h3>闭包的注意点:</h3>
<p>1 内存消耗大，不可滥用闭包，IE中可能导致内存泄漏。解决方式：退出函数前，将不使用的局部变量删除</p>
<p>2 闭包会在父函数外部，改变父函数内部变量的值。</p>
<br>
<p>声明：学自阮一峰老师的博客，感谢。</p>
<p>摘录地址：http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html</p>
</body>
<script>
    var name="The Window";
    var object={
        name:"My Object",
        getNameFunc(){  //1
            return function () {  //2
                return this.name
            }
        }
    }
    //alert(object.getNameFunc()());   //弹出The Window，函数2去1找name未找到，this指向更换到window  若把//2函数体更换为箭头函数则弹出The Window，箭头函数this指向到最顶层
    let name1="The Window";
    let object1={
        name1:"My Object",
        getNameFunc(){
            var that=this;
            return function () {
                return that.name1
            }
        }
    }
    //alert(object1.getNameFunc()()); //弹出My Object，that接收this指向，未转换为window
</script>
</html>